From 111a11e5f5e068658d126d7ee2672aea9e633c1b Mon Sep 17 00:00:00 2001 From: Steven Smith Date: Tue, 31 Oct 2006 10:11:53 +0000 Subject: [PATCH] [HVM][LINUX][TOOLS] Split control/reboot_module into control/feature-reboot and control/feature-sysrq. This is more consistent with the other PV device protocols. Signed-off-by: Steven Smith --- .../drivers/xen/core/machine_reboot.c | 4 -- .../drivers/xen/core/reboot.c | 8 ++-- tools/python/xen/xend/image.py | 38 +++++++++---------- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c b/linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c index c14453ec7e..f7994fc1ce 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c @@ -59,10 +59,6 @@ EXPORT_SYMBOL(machine_restart); EXPORT_SYMBOL(machine_halt); EXPORT_SYMBOL(machine_power_off); -#endif /* defined(__i386__) || defined(__x86_64__) */ - -#if defined(__i386__) || defined(__x86_64__) - /* Ensure we run on the idle task page tables so that we will switch page tables before running user space. This is needed on architectures with separate kernel and user page tables diff --git a/linux-2.6-xen-sparse/drivers/xen/core/reboot.c b/linux-2.6-xen-sparse/drivers/xen/core/reboot.c index 9107b87b2a..bbda656021 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/reboot.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/reboot.c @@ -164,10 +164,14 @@ static int setup_shutdown_watcher(struct notifier_block *notifier, err = register_xenbus_watch(&shutdown_watch); if (err) printk(KERN_ERR "Failed to set shutdown watcher\n"); + else + xenbus_write(XBT_NIL, "control", "feature-reboot", "1"); err = register_xenbus_watch(&sysrq_watch); if (err) printk(KERN_ERR "Failed to set sysrq watcher\n"); + else + xenbus_write(XBT_NIL, "control", "feature-sysrq", "1"); return NOTIFY_DONE; } @@ -179,10 +183,6 @@ static int __init setup_shutdown_event(void) }; register_xenstore_notifier(&xenstore_notifier); - if (!is_initial_xendomain()) { - xenbus_write(XBT_NIL, "control", "reboot_module", "installed"); - } - return 0; } diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py index 0afe4355c3..48d256df16 100644 --- a/tools/python/xen/xend/image.py +++ b/tools/python/xen/xend/image.py @@ -282,7 +282,7 @@ class HVMImageHandler(ImageHandler): log.debug("apic = %d", self.apic) self.register_shutdown_watch() - self.register_reboot_module_watch() + self.register_reboot_feature_watch() return xc.hvm_build(dom = self.vm.getDomid(), image = self.kernel, @@ -417,7 +417,7 @@ class HVMImageHandler(ImageHandler): def destroy(self): self.unregister_shutdown_watch(); - self.unregister_reboot_module_watch(); + self.unregister_reboot_feature_watch(); if not self.pid: return os.kill(self.pid, signal.SIGKILL) @@ -460,34 +460,34 @@ class HVMImageHandler(ImageHandler): return 1 # Keep watching - def register_reboot_module_watch(self): - """ add xen store watch on control/reboot_module """ - self.rebootModuleWatch = xswatch(self.vm.dompath + "/control/reboot_module", \ - self.hvm_reboot_module) - log.debug("hvm reboot module watch registered") + def register_reboot_feature_watch(self): + """ add xen store watch on control/feature-reboot """ + self.rebootModuleWatch = xswatch(self.vm.dompath + "/control/feature-reboot", \ + self.hvm_reboot_feature) + log.debug("hvm reboot feature watch registered") - def unregister_reboot_module_watch(self): - """Remove the watch on the control/reboot_module, if any. Nothrow + def unregister_reboot_feature_watch(self): + """Remove the watch on the control/feature-reboot, if any. Nothrow guarantee.""" try: - if self.rebootModuleWatch: - self.rebootModuleWatch.unwatch() + if self.rebootFeatureWatch: + self.rebootFeatureWatch.unwatch() except: - log.exception("Unwatching hvm reboot module watch failed.") - self.rebootModuleWatch = None - log.debug("hvm reboot module watch unregistered") + log.exception("Unwatching hvm reboot feature watch failed.") + self.rebootFeatureWatch = None + log.debug("hvm reboot feature watch unregistered") - def hvm_reboot_module(self, _): - """ watch call back on node control/reboot_module, + def hvm_reboot_feature(self, _): + """ watch call back on node control/feature-reboot, if node changed, this function will be called """ xd = xen.xend.XendDomain.instance() vm = xd.domain_lookup( self.vm.getDomid() ) - reboot_module_status = vm.readDom('control/reboot_module') - log.debug("hvm_reboot_module fired, module status=%s", reboot_module_status) - if reboot_module_status == 'installed': + status = vm.readDom('control/feature-reboot') + log.debug("hvm_reboot_feature fired, module status=%s", status) + if status == '1': self.unregister_shutdown_watch() return 1 # Keep watching -- 2.30.2